#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
typedef struct
{
    int r[20];
    int length;
}SqList;

void HeapAdjust(SqList &L,int s,int n)//调整堆
{
    int j;
    L.r[0]=L.r[s];
    for(j=2*s;j<=n;j=j*2)
    {
        if(L.r[j]<L.r[j+1]&&j<n) j++;
        if(L.r[0]>=L.r[j]) break;
        L.r[s]=L.r[j];
        s=j;
    }
    L.r[s]=L.r[0];
}

void creatHeap(SqList &L)//建初堆
{
   int i;
   for(i=L.length/2;i>0;i--)
   {
       HeapAdjust(L,i,L.length);
   }
}

void HeadSort(SqList &L)//堆排序
{
    creatHeap(L);
    int i,j;
    for(j=1;j<=L.length;j++)
        printf("%d ",L.r[j]);
    printf("\n");
    for(i=L.length;i>1;i--)
    {
        L.r[0]=L.r[i];
        L.r[i]=L.r[1];
        L.r[1]=L.r[0];
        HeapAdjust(L,1,i-1);
    for(j=1;j<=L.length;j++)
        printf("%d ",L.r[j]);
    printf("\n");
    }
}

int main()
{
    SqList L;
    int i,n;
    scanf("%d",&n);
    L.length=n;
    for(i=1;i<=L.length;i++)
    scanf("%d",&L.r[i]);
    HeadSort(L);
    return 0;
}
